package com.example.sbeducation.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.sbeducation.dto.HomeworkGradeDTO;
import com.example.sbeducation.dto.HomeworkSubmissionDTO;
import com.example.sbeducation.dto.HomeworkReviewDTO;
import com.example.sbeducation.entity.HomeworkSubmission;

import java.util.List;

/**
 * 作业提交服务接口
 */
public interface HomeworkSubmissionService {

  /**
   * 提交作业
   * 
   * @param homeworkSubmissionDTO 作业提交信息
   * @return 提交ID
   */
  Long submitHomework(HomeworkSubmissionDTO homeworkSubmissionDTO);

  /**
   * 批改作业
   * 
   * @param homeworkGradeDTO 作业批改信息
   */
  void gradeHomework(HomeworkGradeDTO homeworkGradeDTO);

  /**
   * 批改作业(新版)
   * 
   * @param reviewDTO 作业批改信息
   * @return 批改结果
   */
  boolean reviewSubmission(HomeworkReviewDTO reviewDTO);

  /**
   * 根据ID获取作业提交
   * 
   * @param submissionId 提交ID
   * @return 作业提交
   */
  HomeworkSubmission getSubmissionById(Long submissionId);

  /**
   * 获取作业的提交列表
   * 
   * @param homeworkId 作业ID
   * @param page       页码
   * @param size       每页数量
   * @return 作业提交分页列表
   */
  Page<HomeworkSubmission> getSubmissionsByHomeworkId(Long homeworkId, Integer page, Integer size);

  /**
   * 获取作业的所有提交列表（包含学生信息）
   * 
   * @param homeworkId 作业ID
   * @return 作业提交列表DTO
   */
  List<HomeworkSubmissionDTO> getSubmissionsByHomeworkId(Long homeworkId);

  /**
   * 获取学生的作业提交列表
   * 
   * @param studentId 学生ID
   * @param page      页码
   * @param size      每页数量
   * @return 作业提交分页列表
   */
  Page<HomeworkSubmission> getSubmissionsByStudentId(Long studentId, Integer page, Integer size);

  /**
   * 获取学生特定作业的提交
   * 
   * @param homeworkId 作业ID
   * @param studentId  学生ID
   * @return 作业提交
   */
  HomeworkSubmission getStudentSubmission(Long homeworkId, Long studentId);
}